<!DOCTYPE html>
<html lang="zh-cn">
<head>
<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=KOZafwuaDasEedEenI5aTy8aXH0epbm6VUJ0v3vsT_Q1"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside.css?v=RRjf6pEarGnbXZ86qxNycPfQivwSKWRa4heYLB15rVE1"/>
<link type="text/css" rel="stylesheet" href="/blog/customcss/428549.css?v=%2fam3bBTkW5NBWhBE%2fD0lcyJv5UM%3d"/>
</head>
<body>
<a name="top"></a>

<div id="page_begin_html"></div><script>load_page_begin_html();</script>

<!--done-->
<div id="home">


<div id="main">
	<div id="mainContent">
	<div class="forFlow">
		
        <div id="post_detail">
<!--done-->
<div id="topics">
	<div class = "post">
		<h1 class = "postTitle">
			<a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/frankdeng/p/8947971.html">Hadoop（一）Hadoop的简介与源码编译</a>
		</h1>
		<div class="clear"></div>
		<div class="postBody">
			<div id="cnblogs_post_body" class="blogpost-body"><h2>一 Hadoop简介</h2>
<h3 class="topic"><span style="font-size: 16px;">1.1Hadoop产生的背景</span></h3>
<p>1.&nbsp;HADOOP<strong>最早起源于Nutch</strong>。Nutch的设计目标是构建一个大型的全网搜索引擎，包括网页抓取、索引、查询等功能，但随着抓取网页数量的增加，<strong>遇到了严重的可扩展性问，</strong>如何解决数十亿网页的存储和索引问题。</p>
<p>2.&nbsp;2003年开始<strong>谷歌陆续发表的三篇论文为该问题提供了可行的解决方案</strong>。</p>
<ul>
<li>分布式文件系统（GFS），可用于处理海量网页的<strong>存储</strong></li>
<li>分布式计算框架MAPREDUCE，可用于处理海量网页的<strong>索引计算</strong>问题。</li>
<li>BigTable 数据库：OLTP 联机事务处理 Online Transaction Processing 增删改，OLAP 联机分析处理 Online Analysis Processing 查询，真正的作用：提供了一种可以在超大数据集中进行实时CRUD操作的功能</li>
</ul>
<p>3.Nutch的开发人员完成了相应的<strong>开源实现HDFS和MAPREDUCE</strong>，并从Nutch中剥离成为独立项目HADOOP，到2008年1月，HADOOP成为Apache顶级项目，迎来了它的快速发展期。</p>
<div class="notesContainer">
<h3>1.2 Hadoop的优势</h3>
<p>1）高可靠性：因为Hadoop假设计算元素和存储会出现故障，因为它维护多个工作数据副本，在出现故障时可以对失败的节点重新分布处理</p>
<p>2）高扩展性：在集群间分配任务数据，可方便的扩展数以千计的节点。</p>
<p>3）高效性：在MapReduce的思想下，Hadoop是并行工作的，以加快任务处理速度。</p>
<p>4）高容错性：自动保存多份副本数据，并且能够自动将失败的任务重新分配。</p>
<h3 class="topic">1.3 Hadoop组成</h3>
<p class="topic">1）Hadoop HDFS：一个高可靠、高吞吐量的分布式文件系统。</p>
<p class="topic">2）Hadoop MapReduce：一个分布式的离线并行计算框架。</p>
<p class="topic">3）Hadoop YARN：作业调度与集群资源管理的框架。</p>
<p class="topic">4）Hadoop Common：支持其他模块的工具模块。</p>
<p class="topic">1.4.1 YARN架构概述</p>
<p class="topic">1）ResourceManager(rm)：&nbsp; 处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度；</p>
<p class="topic">2）NodeManager(nm)：单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令；</p>
<p class="topic">3）ApplicationMaster：数据切分、为应用程序申请资源，并分配给内部任务、任务监控与容错。</p>
<p class="topic">4）Container：对任务运行环境的抽象，封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。</p>
<p class="topic">1.4.2 MapReduce架构概述&nbsp;&nbsp;MapReduce将计算过程分为两个阶段：Map和Reduce</p>
1）Map阶段并行处理输入数据</div>
<div class="notesContainer">2）Reduce阶段对Map结果进行汇总</div>
<div class="notesContainer">
<h3 class="topic">1.4 大数据技术生态体系图</h3>
<p><img src="https://images2018.cnblogs.com/blog/1385722/201805/1385722-20180521162246218-1219839926.png" alt="" /></p>
<h4>Hadoop生态圈重点组件：</h4>
<p>HDFS：Hadoop的分布式文件存储系统。</p>
<p>MapReduce：Hadoop的分布式程序运算框架，也可以叫做一种编程模型。</p>
<p>Hive：基于Hadoop的类SQL数据仓库工具</p>
<p>Hbase：基于Hadoop的列式分布式NoSQL数据库</p>
<p>ZooKeeper：分布式协调服务组件</p>
<p>Mahout：基于MapReduce/Flink/Spark等分布式运算框架的机器学习算法库</p>
<p>Oozie/Azkaban：工作流调度引擎</p>
<p>Sqoop：数据迁入迁出工具</p>
<p>Flume：日志采集工具</p>
<h4 id="blogTitle5">获取数据的三种方式</h4>
<p>1、自己公司收集的数据--日志&nbsp; &nbsp; &nbsp;或者&nbsp; &nbsp; &nbsp;数据库中的数据</p>
<p>2、有一些数据可以通过爬虫从网络中进行爬取</p>
<p>3、从第三方机构购买</p>
<h2>二 Hadoop编译源码</h2>
<h3 style="text-align: left;" align="center">2.1&nbsp;前期准备工作</h3>
<p class="p">1）CentOS联网</p>
<p class="p">配置CentOS能连接外网。最好是用新克隆的虚拟机&nbsp;注意：采用root角色编译，减少文件夹权限出现问题，yum源最好用org官方的，虚拟机内存设置大一点（我这里设置的2G）。</p>
<p class="p">2）编译环境说明</p>
<p class="p">打开下载的hadoop2.7.6源码并解压，打开解压目录下的BUILDING.txt，编译过程和需要的软件其实就是根据这个文档里的描述来的。</p>
<div class="cnblogs_code">
<pre>[root@node100 software]# tar -zxvf hadoop-2.7.6-src.tar.gz -C /opt/<br />[root@node100 hadoop-2.7.6-src]# cat BUILDING.txt&nbsp;</pre>
</div>
<p><img src="https://images2018.cnblogs.com/blog/1385722/201805/1385722-20180525152751004-1359061875.png" alt="" /></p>
<p class="p">3）jar包准备&nbsp;(hadoop源码、JDK7 、&nbsp;maven、&nbsp;ant&nbsp;、protobuf)</p>
<p class="p">（1）hadoop-2.7.6-src.tar.gz</p>
<p class="p">（2）jdk-7u80-linux-x64.tar.gz</p>
<p class="p">（3）apache-ant-1.9.9-bin.tar.gz</p>
<p class="p">（4）apache-maven-3.1.1-bin.tar.gz</p>
<p class="p">（5）protobuf-2.5.0.tar.gz</p>
<h3><strong>2</strong><strong>.</strong><strong>2</strong><strong>&nbsp;</strong><strong>jar包安装</strong></h3>
<p>0）注意：所有操作必须在root用户下完成</p>
<p class="p">1）安装jdk,maven,ant,配置环境变量，验证</p>
<div class="cnblogs_code">
<pre>[root@node100 software]# tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt/module/
[root@node100 software]# tar -zxvf apache-maven-3.1.1-bin.tar.gz -C /opt/module/
[root@node100 software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/
[root@node100 software]# vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
#MAVEN_HOM
export MAVEN_HOME=/opt/module/apache-maven-3.1.1
export PATH=$PATH:$MAVEN_HOME/bin
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.9.11
export PATH=$PATH:$ANT_HOME/bin
[root@node100 software]#source /etc/profile
java -version
mvn -version
ant -version</pre>
</div>
<h4 id="blogTitle10">修改maven的配置文件，添加maven的下载源</h4>
<div class="cnblogs_code">
<pre>[root@node100 software]# cd /opt/module/apache-maven-3.1.1/conf/
[root@node100 conf]# vi settings.xml</pre>
</div>
<p>在mirrors中添加alimaven的下载源</p>
<div class="cnblogs_code">
<pre>&lt;mirrors&gt;
    &lt;!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    
        &lt;mirror&gt;
        &lt;id&gt;alimaven&lt;/id&gt;
        &lt;mirrorOf&gt;central&lt;/mirrorOf&gt;
         &lt;name&gt;aliyun maven&lt;/name&gt;
        &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt;
        &lt;/mirror&gt;
        &lt;mirror&gt;
        &lt;id&gt;mirrorId&lt;/id&gt;
        &lt;mirrorOf&gt;repositoryId&lt;/mirrorOf&gt;
        &lt;name&gt;Human Readable Name for this Mirror.&lt;/name&gt;
        &lt;url&gt;http://my.repository.com/repo/path&lt;/url&gt;
        &lt;/mirror&gt;
     --&gt;
&lt;/mirrors&gt;</pre>
</div>
<p>2）安装protobuf，配置环境变量，验证</p>
<div class="cnblogs_code">
<pre>[root@node100 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/
[root@node100 software]# cd /opt/module/protobuf-2.5.0/
[root@node100 protobuf-2.5.0]#./configure 
[root@node100 protobuf-2.5.0]# make &amp; make install 
[root@node100 protobuf-2.5.0]# vi /etc/profile
#LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0
export PATH=$PATH:$LD_LIBRARY_PATH
[root@node100 software]#source /etc/profile
验证命令：protoc --version</pre>
</div>
<p class="p">3）安装 各种库&nbsp; 命令如下:&nbsp;</p>
<div class="cnblogs_code">
<pre>[root@node100 ~]# yum -y install svn ncurses-devel gcc*
[root@node100 ~]# yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel</pre>
</div>
<p class="p">到此，编译工具安装基本完成。</p>
<h3><strong>2</strong><strong>.</strong><strong>3</strong><strong>&nbsp;编译源码</strong></h3>
<p>1）解压源码到/opt/目录</p>
<div class="cnblogs_code">
<pre>[root@node100 software]# tar -zxvf hadoop-2.7.6-src.tar.gz -C /opt/</pre>
</div>
<p>2）进入到hadoop源码主目录，通过maven执行编译命令</p>
<div class="cnblogs_code">
<pre>[root@node100 ~]# cd /opt/hadoop-2.7.6-src/
[root@node100 hadoop-2.7.6-src]#  mvn  package -Pdist,native -DskipTests -Dtar</pre>
</div>
<p>等待时间30分钟左右，最终成功是全部SUCCESS，首次编译时间可能会有两三个小时</p>
<p><img src="https://images2018.cnblogs.com/blog/1385722/201805/1385722-20180525151845692-73826147.png" alt="" /></p>
<p>3）成功的64位hadoop包在/opt/hadoop-2.7.6-src/hadoop-dist/target下。</p>
<div class="cnblogs_code">
</div>

</body>
</html>
